#include<iostream>
#include<vector>
#include<stack>
using namespace std;
struct Postion
{
    int row;
    int col;
    Postion(int x, int y) :row(x), col(y)
    {}
};

stack<Postion> Path; //记录通路的路径下标位置
stack<Postion> ansPath;//保存最短路径的栈

//输出路径上的坐标 起点->终点
void PrintPath()
{
    //将ansPath栈中的内容倒置才是输出顺序
    stack<Postion> rPath;
    while (!ansPath.empty())
    {
        rPath.push(ansPath.top());
        ansPath.pop();
    }
    //按格式输出内容  最后一个坐标不加, 所以需要分成两部分打印
    //当然也可以在内部判断rPath.size()是否为1，然后打印
    while (rPath.size() > 1)
    {
        Postion top = rPath.top();
        printf("[%d,%d],", top.row, top.col);
        rPath.pop();
    }

    Postion top = rPath.top();
    printf("[%d,%d]", top.row, top.col);
    rPath.pop();
}

//判断能否往pos位置走
bool IsPass(vector<vector<int>>& vv, Postion& pos)
{
    //获取迷宫的行和列
    int N = vv.size();
    int M = vv[0].size();
    //pos位置合法&&pos位置的值是1才是通路，才是可以往pos位置走
    //位置合法：位置的行>=0 && 位置的行<row && 位置的列>=0 && 位置的列<col
    if (pos.row >= 0 && pos.row < N && pos.col >= 0 && pos.col < M
        && vv[pos.row][pos.col] == 1)
        return true;
    else
        return false;
}
//从cur位置开始往四个方向进行搜索，找通路
void GetMazePath(vector<vector<int>>& vv, Postion cur, int P)
{
    Path.push(cur);//先把当前位置放到路径栈当中
    int N = vv.size();
    int M = vv[0].size();
    if (cur.row == 0 && cur.col == M - 1)//判断是否走到出口
    {
        //体力值衡量的是这条路径是否有效
        if (P >= 0 && ansPath.empty() || Path.size() < ansPath.size())
        {
            //更新答案栈
            ansPath = Path;//深拷贝
        }
    }

    vv[cur.row][cur.col] = 2;//把当前位置置成2,或者其它数字也可以，表示已经走过了！

    //往四个方向进行探测，顺序任意，因为答案唯一
    Postion nextUp{ cur.row - 1,cur.col };
    Postion nextDown{ cur.row + 1, cur.col };
    Postion nextLeft{ cur.row, cur.col - 1 };
    Postion nextRight{ cur.row, cur.col + 1 };

    //先判断能否往该方向走，如果能才往该方向进行下一步探索
    if (IsPass(vv, nextUp))//上 ->消耗3体力
        GetMazePath(vv, nextUp,P - 3);

    if (IsPass(vv, nextDown))//下 ->不消耗体力
        GetMazePath(vv, nextDown, P);

    if (IsPass(vv, nextLeft))//左 ->消耗1体力
        GetMazePath(vv, nextLeft, P - 1);

    if (IsPass(vv, nextRight))//右 ->消耗1体力
        GetMazePath(vv, nextRight, P - 1);

    //无论是四个方向都走不通还是已经找到通路
    //都要恢复现场进行回溯 -> 位置置1并且在路径栈弹出当前坐标，继续探索找最短路径
    vv[cur.row][cur.col] = 1;
    Path.pop();
}
int main()
{
    int N, M, P;
    while (cin >> N >> M >> P)
    {
        vector<vector<int>> maze(N, vector<int>(M));
        for (int i = 0; i < N; i++)
            for (int j = 0; j < M; j++)
                cin >> maze[i][j];

        Postion start{ 0,0 };//起点位置
        GetMazePath(maze, start, P);//从起点位置开始探索找通路
        if(!ansPath.empty())//找到最短的通路了，输出路径
           PrintPath();
        else
          cout << "Can not escape!" << endl;
    }

    return 0;
}